{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "40108051-4355-41a3-8b9b-60105416f68c",
   "metadata": {},
   "source": [
    "Chapter 15\n",
    "\n",
    "# 用Networkx绘制有向图\n",
    "《线性代数》 | 鸢尾花书：数学不难"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6531c206-4776-4767-9d8c-a206d89c57a1",
   "metadata": {},
   "source": [
    "这段代码从数学角度构建并可视化了一个**有向图（Directed Graph）**。有向图可以用**有向邻接矩阵**或有向边集来表示，其本质是一个**带有方向的关系网络**。我们从头解释这段代码所做的数学含义：\n",
    "\n",
    "---\n",
    "\n",
    "首先，我们使用 `nx.DiGraph()` 创建了一个有向图对象 `directed_G`。数学上，这对应一个**有序对**：\n",
    "\n",
    "$G = (V, E)$\n",
    "\n",
    "其中：\n",
    "- $V$ 是节点集合（Vertices），在这里是 $\\{a, b, c, d\\}$；\n",
    "- $E$ 是有向边集合（Edges），每条边是一个有序对，例如 $(a, b)$ 表示一条从节点 $a$ 指向节点 $b$ 的边。\n",
    "\n",
    "---\n",
    "\n",
    "接下来，我们添加了7条有向边。我们可以用边集 $E$ 表示如下：\n",
    "\n",
    "$$\n",
    "E = \\{(a, b), (b, a), (a, c), (d, a), (b, c), (c, d), (d, c)\\}\n",
    "$$\n",
    "\n",
    "注意，这些边是**有向的**，例如 $(a, b) \\ne (b, a)$，两者是不同的边，代表不同的方向。特别是 $(c, d)$ 与 $(d, c)$ 同时出现，表示在节点 $c$ 和 $d$ 之间存在**双向关系**。\n",
    "\n",
    "---\n",
    "\n",
    "若将此图转换为**有向邻接矩阵** $A$，其定义如下：\n",
    "\n",
    "$A_{ij} = 1$ 表示存在一条从节点 $i$ 指向节点 $j$ 的边，否则 $A_{ij} = 0$。\n",
    "\n",
    "例如，在本图中：\n",
    "\n",
    "- $A_{ab} = 1$，表示 $a \\to b$；\n",
    "- $A_{ba} = 1$，表示 $b \\to a$；\n",
    "- $A_{ad} = 0$，因为 $a$ 没有指向 $d$。\n",
    "\n",
    "因此邻接矩阵是一个**非对称矩阵**，矩阵的对称性反映图的对称性。\n",
    "\n",
    "---\n",
    "\n",
    "定义了节点的位置 `pos` 后，我们通过 `nx.draw_networkx` 将图形可视化。每个节点的位置是一个二维向量，例如：\n",
    "\n",
    "- $pos(a) = (0, 0)$\n",
    "- $pos(b) = (1, 0)$\n",
    "- $pos(c) = (1, 1)$\n",
    "- $pos(d) = (0, 1)$\n",
    "\n",
    "这对应于将节点嵌入二维平面中的一种方式，可以看成一个函数 $f: V \\rightarrow \\mathbb{R}^2$，将每个节点映射到二维坐标空间。\n",
    "\n",
    "---\n",
    "\n",
    "可视化时，`connectionstyle='arc3, rad=0.1'` 的作用是将**双向边**画成**弯曲的曲线**，避免两条方向相反的边重叠，使图结构更清晰可读。也就是说，在 $(a, b)$ 和 $(b, a)$ 同时存在时，会分别画出从 $a \\to b$ 的箭头和从 $b \\to a$ 的反向箭头。\n",
    "\n",
    "---\n",
    "\n",
    "最终，整个图形代表的是一个**带方向的结构网络**，可以用于模拟现实世界中许多“单向”关系，例如航班网络、网页链接、任务依赖等。数学上这是研究**图遍历、连通性、强连通分量、拓扑排序、路径最短路**等问题的基础结构。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9581254a-4add-4150-a1ab-52b5d9cbc269",
   "metadata": {},
   "source": [
    "## 初始化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "a0e50778-9b32-411d-8981-9f91f17b938a",
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import networkx as nx"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fa47fbb9-de11-4fc9-95f6-1351d54c5e97",
   "metadata": {},
   "source": [
    "## 有向图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "e53aa32b-f827-44a3-bba3-3927279c3615",
   "metadata": {},
   "outputs": [],
   "source": [
    "directed_G = nx.DiGraph()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ccdeb747-26cb-4d70-a871-20292e6b258b",
   "metadata": {},
   "source": [
    "## 节点"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "52fd8065-1144-4886-afe3-840e57de0ee0",
   "metadata": {},
   "outputs": [],
   "source": [
    "directed_G.add_nodes_from(['a','b','c','d'])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "be007a53-b97f-4bec-b738-ec0358552a6b",
   "metadata": {},
   "source": [
    "## 有向边"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "2c8d1948-e2d3-490a-a554-cc50341e47f8",
   "metadata": {},
   "outputs": [],
   "source": [
    "directed_G.add_edges_from([('a','b'),\n",
    "                           ('b','a'),\n",
    "                           ('a','c'),\n",
    "                           ('d','a'),\n",
    "                           ('b','c'),\n",
    "                           ('c','d'),\n",
    "                           ('d','c')])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "17db5691-e021-4513-a704-0824f0f2ed92",
   "metadata": {},
   "source": [
    "## 定义节点坐标"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "a62cc18d-eb71-4490-8dc0-2731ada91042",
   "metadata": {},
   "outputs": [],
   "source": [
    "pos = {'a':[0, 0], \n",
    "       'b':[1, 0],\n",
    "       'c':[1, 1],\n",
    "       'd':[0, 1]}"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5ebec0cd-b749-43b4-ade7-8952f031748a",
   "metadata": {},
   "source": [
    "## 可视化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "ced4448e-0ef3-496a-b3d5-9ed907c7c713",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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UEgLOSgoCG3atEFycrLoUoQzm8147rnnMHjwYPTs2RNHjhxhGBMR1SM5ORmxsbGyn/IEKKSFDACJiYlISUkRXYZQZ86cwcSJE3Hw4EHMmzcPTz/9NE+XSER0EcnJyUhMTBRdRoMoZmuekJDg0S3k1atXo0ePHsjOzsbu3bvx7LPPMoyJiC4hJSUFCQkJostoEMVs0RMTE3Hq1ClUVFSILqVZmUwmPP744xg9ejT69euHw4cP48YbbxRdFhGR7JWWliIrK4st5MaWkJAAm82GkydPii6l2aSmpqJ379747LPP8NFHH2HlypUICQkRXRYRkSLYD3MykBuZvcvBU44jL126FNdddx2MRiP279+PRx55BCqVSnRZRESKkZKSApVKhY4dO4oupUEUE8hBQUFo3bq12x9HLi8vx6xZszB58mSMGDECf/zxB6d6ERFdAfsI6xYtWogupUEUM8oacP+R1snJyRg/fjxOnTqFr776CtOnT2ermIjoCqWkpCimuxpQUAsZcN+R1pIk4fPPP0fPnj0BAAcPHsSMGTMYxkREVyE5OVkxI6wBhQVyYmIi0tPTYTKZRJfSaC5cuIDRo0fjgQcewL333ovffvtNUR8gIiI5UtoIa0CBgexOI603btyIrl27YteuXVi9ejU+++wzxRzrICKSs+PHjwNQzghrQGGBbF/TWund1hUVFXjiiScwePBgXHvttfjzzz8xcuRI0WUREbmN5ORkRY2wBhQ2qCs4OBitW7dW9MCuI0eOYPLkyTh16hQ+/PBDPProozxWTETUyJQ2whpQWAsZUO7ALpvNhnfffRe9evWCt7c3Dh48iMcee4xhTETUBJS0ZKad4gJZiVOfsrKycOedd2Lu3Ll48sknceDAAUUd1yAiUholnVTCTnGBnJCQgLS0NMWMtF6+fDm6deuG1NRU/Prrr5g3bx58fHxEl0VE5LaUOMIaUGAgK2WkdUlJCaZOnYoJEyZgwIABOHr0KPr16ye6LCIit2cfYc0u6yamhDWtd+/eje7du2PNmjX473//i++++44nhSAiaib2EdadOnUSXcplUVwgBwcHIzo6WpYDu8xmM1566SX07dsXMTExOHr0KKZMmcKBW0REzUiJI6wBhU17spPjwK6TJ0/i3nvvxZEjR/D666/jueeeg0ajEV0WEZHHUeIIa0CBLWSgutv62LFjossA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",
      "text/plain": [
       "<Figure size 600x600 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize = (6,6))\n",
    "nx.draw_networkx(directed_G, pos = pos, node_size = 188,\n",
    "                connectionstyle = 'arc3, rad = 0.1')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "0861f786-e1ae-4cac-aca3-7bcaefcaa9bb",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[0, 1, 1, 0],\n",
       "       [1, 0, 1, 0],\n",
       "       [0, 0, 0, 1],\n",
       "       [1, 0, 1, 0]])"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A = nx.adjacency_matrix(directed_G).toarray()\n",
    "A"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "51990a2e-71bb-46ec-b191-f113bea09756",
   "metadata": {},
   "source": [
    "作者\t**生姜DrGinger**  \n",
    "脚本\t**生姜DrGinger**  \n",
    "视频\t**崔崔CuiCui**  \n",
    "开源资源\t[**GitHub**](https://github.com/Visualize-ML)  \n",
    "平台\t[**油管**](https://www.youtube.com/@DrGinger_Jiang)\t\t\n",
    "\t\t[**iris小课堂**](https://space.bilibili.com/3546865719052873)\t\t\n",
    "\t\t[**生姜DrGinger**](https://space.bilibili.com/513194466)  "
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python [conda env:base] *",
   "language": "python",
   "name": "conda-base-py"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
